function red() {
  console.log('red');
}
function green() {
  console.log('green');
}
function yellow() {
  console.log('yellow');
}

const light = function(cb, timer) {
  return new Promise(resolve => {
    setTimeout(() => {
      cb();
      resolve();
    }, timer)
  })
}

const step = function() {
  Promise.resolve().then(() => {
    return light(red, 3000);
  }).then(() => {
    return light(green, 2000);
  }).then(() => {
    return light(yellow, 1000);
  }).then(() => {
    return step();
  })
}

step();
